<?php
/**
 * Smarty Internal Plugin Compile Config Load
 *
 * Compiles the {config load} tag
 *
 * @package Smarty
 * @subpackage Compiler
 * @author Uwe Tews
 */

/**
 * Smarty Internal Plugin Compile Config Load Class
 *
 * @package Smarty
 * @subpackage Compiler
 */
class Smarty_Internal_Compile_Config_Load extends Smarty_Internal_CompileBase {
	
	/**
	 * Attribute definition: Overwrites base class.
	 *
	 * @var array
	 * @see Smarty_Internal_CompileBase
	 */
	public $required_attributes = array ('file' );
	/**
	 * Attribute definition: Overwrites base class.
	 *
	 * @var array
	 * @see Smarty_Internal_CompileBase
	 */
	public $shorttag_order = array ('file', 'section' );
	/**
	 * Attribute definition: Overwrites base class.
	 *
	 * @var array
	 * @see Smarty_Internal_CompileBase
	 */
	public $optional_attributes = array ('section', 'scope' );
	
	/**
	 * Compiles code for the {config_load} tag
	 *
	 * @param $args array
	 *       	 array with attributes from parser
	 * @param $compiler object
	 *       	 compiler object
	 * @return string compiled code
	 */
	public function compile($args, $compiler) {
		static $_is_legal_scope = array ('local' => true, 'parent' => true, 'root' => true, 'global' => true );
		// check and get attributes
		$_attr = $this->getAttributes ( $compiler, $args );
		
		if ($_attr ['nocache'] === true) {
			$compiler->trigger_template_error ( 'nocache option not allowed', $compiler->lex->taglineno );
		}
		
		// save posible attributes
		$conf_file = $_attr ['file'];
		if (isset ( $_attr ['section'] )) {
			$section = $_attr ['section'];
		} else {
			$section = 'null';
		}
		$scope = 'local';
		// scope setup
		if (isset ( $_attr ['scope'] )) {
			$_attr ['scope'] = trim ( $_attr ['scope'], "'\"" );
			if (isset ( $_is_legal_scope [$_attr ['scope']] )) {
				$scope = $_attr ['scope'];
			} else {
				$compiler->trigger_template_error ( 'illegal value for "scope" attribute', $compiler->lex->taglineno );
			}
		}
		// create config object
		$_output = "<?php  \$_config = new Smarty_Internal_Config($conf_file, \$_smarty_tpl->smarty, \$_smarty_tpl);";
		$_output .= "\$_config->loadConfigVars($section, '$scope'); ?>";
		return $_output;
	}

}

?>